{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('seaborn-whitegrid')\n",
    "plt.rc('font', **{'family': 'Microsoft YaHei, SimHei'})  # 设置中文字体的支持"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>品格</th>\n",
       "      <th>能力</th>\n",
       "      <th>资本</th>\n",
       "      <th>担保</th>\n",
       "      <th>环境</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>76.5</td>\n",
       "      <td>81.5</td>\n",
       "      <td>76.0</td>\n",
       "      <td>75.8</td>\n",
       "      <td>71.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>70.6</td>\n",
       "      <td>73.0</td>\n",
       "      <td>67.6</td>\n",
       "      <td>68.1</td>\n",
       "      <td>78.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>90.7</td>\n",
       "      <td>87.3</td>\n",
       "      <td>91.0</td>\n",
       "      <td>81.5</td>\n",
       "      <td>80.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>77.5</td>\n",
       "      <td>73.6</td>\n",
       "      <td>70.9</td>\n",
       "      <td>69.8</td>\n",
       "      <td>74.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>85.6</td>\n",
       "      <td>68.5</td>\n",
       "      <td>70.0</td>\n",
       "      <td>62.2</td>\n",
       "      <td>76.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>85.0</td>\n",
       "      <td>79.2</td>\n",
       "      <td>80.3</td>\n",
       "      <td>84.4</td>\n",
       "      <td>76.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>94.0</td>\n",
       "      <td>94.0</td>\n",
       "      <td>87.5</td>\n",
       "      <td>89.5</td>\n",
       "      <td>92.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>84.6</td>\n",
       "      <td>66.9</td>\n",
       "      <td>68.8</td>\n",
       "      <td>64.8</td>\n",
       "      <td>66.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>57.7</td>\n",
       "      <td>60.4</td>\n",
       "      <td>57.4</td>\n",
       "      <td>60.8</td>\n",
       "      <td>65.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>70.0</td>\n",
       "      <td>69.2</td>\n",
       "      <td>71.7</td>\n",
       "      <td>64.9</td>\n",
       "      <td>68.9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ID    品格    能力    资本    担保    环境\n",
       "0   1  76.5  81.5  76.0  75.8  71.7\n",
       "1   2  70.6  73.0  67.6  68.1  78.5\n",
       "2   3  90.7  87.3  91.0  81.5  80.0\n",
       "3   4  77.5  73.6  70.9  69.8  74.8\n",
       "4   5  85.6  68.5  70.0  62.2  76.5\n",
       "5   6  85.0  79.2  80.3  84.4  76.5\n",
       "6   7  94.0  94.0  87.5  89.5  92.0\n",
       "7   8  84.6  66.9  68.8  64.8  66.4\n",
       "8   9  57.7  60.4  57.4  60.8  65.0\n",
       "9  10  70.0  69.2  71.7  64.9  68.9"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('loan_apply.csv')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1b2cb2a4c50>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 求解相关系数矩阵，证明做主成分分析的必要性\n",
    "## 丢弃无用的 ID 列\n",
    "data = df.drop(columns='ID')\n",
    "\n",
    "import seaborn as sns\n",
    "sns.heatmap(data.corr(), annot=True) \n",
    "# annot=True: 显示相关系数矩阵的具体数值\n",
    "# 发现变量间相关性都比较高，大于 0.7，有做 PCA 的必要"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据标准化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# PCA 通常用中心标准化，也就是都转化成 Z 分数的形式\n",
    "from sklearn.preprocessing import scale\n",
    "data = scale(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PCA 建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PCA(n_components=5)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA\n",
    "\n",
    "# 说明：\n",
    "## 1. 第一次的 n_components 参数最好设置得大一些（保留的主成份）\n",
    "## 2. 观察 explained_variance_ratio_ 取值变化，即每个主成分能够解释原始数据变异的百分比\n",
    "pca = PCA(n_components=5) # 直接与变量个数相同的主成分\n",
    "pca.fit(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 结果分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 累计解释变异程度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.84223701, 0.07667191, 0.0594929 , 0.01591189, 0.00568629])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pca.explained_variance_ratio_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(pca.explained_variance_ratio_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.cumsum(pca.explained_variance_ratio_), linewidth=3)\n",
    "plt.xlabel('成份数')\n",
    "plt.ylabel('累积解释方差'); plt.grid(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 重新建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 重新选择主成分个数进行建模\n",
    "pca = PCA(n_components=1).fit(data)\n",
    "new_data = pca.fit_transform(data)  # fit_transform 表示将生成降维后的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数据集规模:    (10, 5)\n",
      "降维后的数据集规模: (10, 1)\n"
     ]
    }
   ],
   "source": [
    "# 查看规模差别\n",
    "print(\"原始数据集规模:   \", data.shape)\n",
    "print(\"降维后的数据集规模:\", new_data.shape)\n",
    "\n",
    "# 果然由 5 列降到一列\n",
    "# 原始数据集规模:    (10, 5)\n",
    "# 降维后的数据集规模: (10, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 主成分中各变量的权重分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.413490</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.472893</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.465599</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.454653</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.426504</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0\n",
       "0  0.413490\n",
       "1  0.472893\n",
       "2  0.465599\n",
       "3  0.454653\n",
       "4  0.426504"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 第一个主成分（解释了 84% 的变异的那个）与 5 个 X 的系数关系\n",
    "pd.DataFrame(pca.components_).T\n",
    "# 可以理解成：第一主成分 = 0.413*X1 + 0.47*X2 + 0.46*X3 + 0.45*X4 + 0.42*X5\n",
    "## 所以说生成的主成分除降维意义显著外，并没有什么其他的意义，并不好解释"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 做出决策"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>品格</th>\n",
       "      <th>能力</th>\n",
       "      <th>资本</th>\n",
       "      <th>担保</th>\n",
       "      <th>环境</th>\n",
       "      <th>PCA</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>76.5</td>\n",
       "      <td>81.5</td>\n",
       "      <td>76.0</td>\n",
       "      <td>75.8</td>\n",
       "      <td>71.7</td>\n",
       "      <td>0.267437</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>70.6</td>\n",
       "      <td>73.0</td>\n",
       "      <td>67.6</td>\n",
       "      <td>68.1</td>\n",
       "      <td>78.5</td>\n",
       "      <td>-0.775172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>90.7</td>\n",
       "      <td>87.3</td>\n",
       "      <td>91.0</td>\n",
       "      <td>81.5</td>\n",
       "      <td>80.0</td>\n",
       "      <td>2.603684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>77.5</td>\n",
       "      <td>73.6</td>\n",
       "      <td>70.9</td>\n",
       "      <td>69.8</td>\n",
       "      <td>74.8</td>\n",
       "      <td>-0.440204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>85.6</td>\n",
       "      <td>68.5</td>\n",
       "      <td>70.0</td>\n",
       "      <td>62.2</td>\n",
       "      <td>76.5</td>\n",
       "      <td>-0.678219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>85.0</td>\n",
       "      <td>79.2</td>\n",
       "      <td>80.3</td>\n",
       "      <td>84.4</td>\n",
       "      <td>76.5</td>\n",
       "      <td>1.389937</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>94.0</td>\n",
       "      <td>94.0</td>\n",
       "      <td>87.5</td>\n",
       "      <td>89.5</td>\n",
       "      <td>92.0</td>\n",
       "      <td>3.960102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>84.6</td>\n",
       "      <td>66.9</td>\n",
       "      <td>68.8</td>\n",
       "      <td>64.8</td>\n",
       "      <td>66.4</td>\n",
       "      <td>-1.310850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>57.7</td>\n",
       "      <td>60.4</td>\n",
       "      <td>57.4</td>\n",
       "      <td>60.8</td>\n",
       "      <td>65.0</td>\n",
       "      <td>-3.530640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>70.0</td>\n",
       "      <td>69.2</td>\n",
       "      <td>71.7</td>\n",
       "      <td>64.9</td>\n",
       "      <td>68.9</td>\n",
       "      <td>-1.486076</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ID    品格    能力    资本    担保    环境       PCA\n",
       "0   1  76.5  81.5  76.0  75.8  71.7  0.267437\n",
       "1   2  70.6  73.0  67.6  68.1  78.5 -0.775172\n",
       "2   3  90.7  87.3  91.0  81.5  80.0  2.603684\n",
       "3   4  77.5  73.6  70.9  69.8  74.8 -0.440204\n",
       "4   5  85.6  68.5  70.0  62.2  76.5 -0.678219\n",
       "5   6  85.0  79.2  80.3  84.4  76.5  1.389937\n",
       "6   7  94.0  94.0  87.5  89.5  92.0  3.960102\n",
       "7   8  84.6  66.9  68.8  64.8  66.4 -1.310850\n",
       "8   9  57.7  60.4  57.4  60.8  65.0 -3.530640\n",
       "9  10  70.0  69.2  71.7  64.9  68.9 -1.486076"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = df.join(pd.DataFrame(new_data, columns=['PCA'])) # 与原来的数据拼接\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>品格</th>\n",
       "      <th>能力</th>\n",
       "      <th>资本</th>\n",
       "      <th>担保</th>\n",
       "      <th>环境</th>\n",
       "      <th>PCA</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>94.0</td>\n",
       "      <td>94.0</td>\n",
       "      <td>87.5</td>\n",
       "      <td>89.5</td>\n",
       "      <td>92.0</td>\n",
       "      <td>3.960102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>90.7</td>\n",
       "      <td>87.3</td>\n",
       "      <td>91.0</td>\n",
       "      <td>81.5</td>\n",
       "      <td>80.0</td>\n",
       "      <td>2.603684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>85.0</td>\n",
       "      <td>79.2</td>\n",
       "      <td>80.3</td>\n",
       "      <td>84.4</td>\n",
       "      <td>76.5</td>\n",
       "      <td>1.389937</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>76.5</td>\n",
       "      <td>81.5</td>\n",
       "      <td>76.0</td>\n",
       "      <td>75.8</td>\n",
       "      <td>71.7</td>\n",
       "      <td>0.267437</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>77.5</td>\n",
       "      <td>73.6</td>\n",
       "      <td>70.9</td>\n",
       "      <td>69.8</td>\n",
       "      <td>74.8</td>\n",
       "      <td>-0.440204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>85.6</td>\n",
       "      <td>68.5</td>\n",
       "      <td>70.0</td>\n",
       "      <td>62.2</td>\n",
       "      <td>76.5</td>\n",
       "      <td>-0.678219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>70.6</td>\n",
       "      <td>73.0</td>\n",
       "      <td>67.6</td>\n",
       "      <td>68.1</td>\n",
       "      <td>78.5</td>\n",
       "      <td>-0.775172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>84.6</td>\n",
       "      <td>66.9</td>\n",
       "      <td>68.8</td>\n",
       "      <td>64.8</td>\n",
       "      <td>66.4</td>\n",
       "      <td>-1.310850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>70.0</td>\n",
       "      <td>69.2</td>\n",
       "      <td>71.7</td>\n",
       "      <td>64.9</td>\n",
       "      <td>68.9</td>\n",
       "      <td>-1.486076</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>57.7</td>\n",
       "      <td>60.4</td>\n",
       "      <td>57.4</td>\n",
       "      <td>60.8</td>\n",
       "      <td>65.0</td>\n",
       "      <td>-3.530640</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ID    品格    能力    资本    担保    环境       PCA\n",
       "6   7  94.0  94.0  87.5  89.5  92.0  3.960102\n",
       "2   3  90.7  87.3  91.0  81.5  80.0  2.603684\n",
       "5   6  85.0  79.2  80.3  84.4  76.5  1.389937\n",
       "0   1  76.5  81.5  76.0  75.8  71.7  0.267437\n",
       "3   4  77.5  73.6  70.9  69.8  74.8 -0.440204\n",
       "4   5  85.6  68.5  70.0  62.2  76.5 -0.678219\n",
       "1   2  70.6  73.0  67.6  68.1  78.5 -0.775172\n",
       "7   8  84.6  66.9  68.8  64.8  66.4 -1.310850\n",
       "9  10  70.0  69.2  71.7  64.9  68.9 -1.486076\n",
       "8   9  57.7  60.4  57.4  60.8  65.0 -3.530640"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results.sort_values(by='PCA', ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "贷款给 7 号客户风险最低，给 9 号客户风险最高"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autoclose": false,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
